package com.taobao.askwho.utils;

/**
 * Copyright 2008 Grant Ingersoll
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed
 * to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 *  KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
 */

import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.FacetField;
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.SolrParams;

import java.io.IOException;
import java.util.Collection;
import java.util.HashSet;
import java.util.Random;
import java.util.List;

/**
 * Connect to Solr and issue a query
 */
public class SolrJExample {

  public static final String [] CATEGORIES = {"a", "b", "c", "d"};

  public static void main(String[] args) throws IOException, SolrServerException {
    SolrServer server = new CommonsHttpSolrServer("http://localhost:8983/solr/rss");
    Random rand = new Random();
    //Index some documents
    Collection<SolrInputDocument> docs = new HashSet<SolrInputDocument>();
    for (int i = 0; i < 10; i++) {
      SolrInputDocument doc = new SolrInputDocument();
      doc.addField("link", "http://non-existent-url.foo/" + i + ".html");
      doc.addField("source", "Blog #" + i);
      doc.addField("source-link", "http://non-existent-url.foo/index.html");
      doc.addField("subject", "Subject: " + i);
      doc.addField("title", "Title: " + i);
      doc.addField("content", "This is the " + i + "(th|nd|rd) piece of content.");
      doc.addField("category", CATEGORIES[rand.nextInt(CATEGORIES.length)]);
      doc.addField("rating", i);
      System.out.println("Doc[" + i + "] is " + doc);
      docs.add(doc);
    }
    UpdateResponse response = server.add(docs);
    System.out.println("Response: " + response);
    //Make the documents available for search
    server.commit();
    //create the query
    SolrQuery query = new SolrQuery("content:piece");
    //indicate we want facets
    query.setFacet(true);
    //indicate what field to facet on
    query.addFacetField("category");
    //we only want facets that have at least one entry
    query.setFacetMinCount(1);
    //run the query
    QueryResponse results = server.query(query);
    System.out.println("Query Results: " + results);
    //print out the facets
    List<FacetField> facets = results.getFacetFields();
    for (FacetField facet : facets) {
      System.out.println("Facet:" + facet);
    }
  }

}
